package com.zliblike_platform.service;

import com.zliblike_platform.dto.UserLoginDTO;
import com.zliblike_platform.dto.UserRegisterDTO;
import com.zliblike_platform.dto.UserUpdateDTO;
import com.zliblike_platform.entity.User;
import com.zliblike_platform.vo.UserVO;

/**
 * 用户服务接口
 */
public interface UserService {
    
    /**
     * 用户注册
     * @param registerDTO 注册信息
     * @return 是否注册成功
     */
    boolean register(UserRegisterDTO registerDTO);
    
    /**
     * 用户登录
     * @param loginDTO 登录信息
     * @return 是否登录成功
     */
    boolean login(UserLoginDTO loginDTO);
    
    /**
     * 根据ID获取用户信息
     * @param id 用户ID
     * @return 用户信息
     */
    UserVO getUserById(Long id);
    
    /**
     * 更新用户信息
     * @param id 用户ID
     * @param updateDTO 更新信息
     * @return 是否更新成功
     */
    boolean updateUser(Long id, UserUpdateDTO updateDTO);
    
    /**
     * 更新用户密码
     * @param id 用户ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return 是否更新成功
     */
    boolean updatePassword(Long id, String oldPassword, String newPassword);
    
    /**
     * 添加用户积分
     * @param id 用户ID
     * @param points 积分
     * @return 是否添加成功
     */
    boolean addPoints(Long id, Integer points);
    
    /**
     * 判断用户今日下载次数是否已达上限
     * @param id 用户ID
     * @return 是否达到上限
     */
    boolean isDownloadLimitReached(Long id);
    
    /**
     * 根据用户名或邮箱查询用户
     * @param usernameOrEmail 用户名或邮箱
     * @return 用户信息
     */
    User findByUsernameOrEmail(String usernameOrEmail);
    
    /**
     * 检查用户邮箱是否已存在
     * @param email 邮箱
     * @return 是否存在
     */
    boolean isEmailExists(String email);
    
    /**
     * 检查用户名是否已存在
     * @param username 用户名
     * @return 是否存在
     */
    boolean isUsernameExists(String username);
    
    /**
     * 获取用户今日已下载次数
     * @param userId 用户ID
     * @return 今日已下载次数
     */
    Integer getUserDailyDownloads(Long userId);
} 